/* $Id: login.prg,v 1.0 2008/11/04 14:52:05 riztan Exp $*/
/* 
	Copyright © 2008  Riztan Gutierrez <riztang@proandsys.org>

   Este programa es software libre: usted puede redistribuirlo y/o modificarlo 
   conforme a los términos de la Licencia Pública General de GNU publicada por
   la Fundación para el Software Libre, ya sea la versión 3 de esta Licencia o 
   (a su elección) cualquier versión posterior.

   Este programa se distribuye con el deseo de que le resulte útil, pero 
   SIN GARANTÍAS DE NINGÚN TIPO; ni siquiera con las garantías implícitas de
   COMERCIABILIDAD o APTITUD PARA UN PROPÓSITO DETERMINADO. Para más información, 
   consulte la Licencia Pública General de GNU.

   http://www.gnu.org/licenses/
*/

/** \file login.prg.
 *  \brief Programa de Acceso a Base de Datos \c "login.prg" 
 *  \author Riztan Gutierrez. riztan@gmail.com
 *  \date 2008
 *  \remark El contenido esta relacionado al manejo de archivos .xml y/o .ini "tools02.prg"
*/

#include "gclass.ch"
#include "proandsys.ch"

// GLOBAL EXTERNAL oTepuy /** \var GLOBAL oTepuy. Objeto Principal oTepuy. */
memvar oTepuy


/** \brief Interfaz gráfica para la recoleccion de datos de acceso a la base de datos.
 */
FUNCTION gui_login()
   
   Local cResource := oTepuy:cResource, lRet:=.F., cPass:=""
   Local oLogin, og_usuario, og_contrasena, og_server, og_db, og_puerto
   Local oButton,oCheckBox

   Local cHost  := oTepuy:cHost
   Local cPort  := CStr(oTepuy:nPort)
   Local cDb    := oTepuy:cDb  
   Local cUser  := oTepuy:cUser
   Local lCheck := IIF( "T"$oTepuy:cSavePass , .T. , .F.)
   
   IF !Empty(oTepuy:cPass)
      cPass := hb_decrypt(oTepuy:cPass, oTepuy:cPassword)
   ENDIF

   DEFINE WINDOW oLogin ID "login" RESOURCE cResource;
      TITLE oTepuy:cSystem_Name+"  [login]";
      ICON_FILE oTepuy:cIconMain

      DEFINE ENTRY og_usuario    ID "g_usuario"    RESOURCE cResource;
             VAR cUser
      DEFINE ENTRY og_contrasena ID "g_contrasena" RESOURCE cResource;
             VAR cPass
      DEFINE ENTRY og_server     ID "g_server"     RESOURCE cResource;
             VAR cHost
      DEFINE ENTRY og_db         ID "g_db"         RESOURCE cResource;
             VAR cDb
      DEFINE ENTRY og_puerto     ID "g_puerto"     RESOURCE cResource;
             VAR cPort
             
      DEFINE CHECKBOX oCheckBox  ID "checkbutton1" RESOURCE cResource;
             VAR lCheck 

      DEFINE BUTTON oButton ID "conectar" RESOURCE cResource;
             ACTION ( oTepuy:cSavePass := IIF( lCheck , "T" , "F" )  ,;
                      lRet := Login(cHost,cPort,cDb,cUser,cPass)     ,;
                      IIF ( PQStatus( oTepuy:conn ) = CONNECTION_OK  ,;
                            oLogin:End(),NIL) )

      DEFINE BUTTON oButton ID "cancelar" RESOURCE cResource;
             ACTION (lRet:=.F.,oLogin:End())

   ACTIVATE WINDOW oLogin CENTER

RETURN lRet


/** \brief Realiza intento de conexion a la base de datos.
 *  \par cHost de tipo caracter con direccion del Servidor de Base de datos.
 *  \par cPort de tipo caracter con el puerto de comunicacion.
 *  \par cDb de tipo caracter indicando la base de datos a conectar.
 *  \par cUser de tipo caracter indicando la identificacion del usuario.
 *  \par cPass de tipo caracter que representa la contraseña que enviara al servidor.
 *  \ret Retorna Verdadero o Falso 
 */
FUNCTION Login( cHost, cPort, cDb, cUser, cPass )
   Local lRet :=.F.
   Local conn
   Local cPQStatus:=""

   conn := PQsetdbLogin( cHost, cPort, NIL, NIL, cDb, cUser, cPass)

   conn := PQConnect(cDB, cHost, cUser, cPass, Val(cPort) )

   oTepuy:conn := conn
   
   oTepuy:oConn := TPQserver():New( cHost, cDB, cUser, cPass, Val(cPort)  )

   If PQStatus(conn) != CONNECTION_OK

      cPQStatus := Alltrim( STR( PQStatus(conn) ) )

      MsgStop( "<b>"+MSG_STATUS_CONNECTION+":</b> "+cPQStatus+CRLF+;
               "<b>Error:</b> "+( PQErrorMessage(conn) ),;
               MSG_ERROR_CONNECTION )

      Return .F.

   EndIf

   oTepuy:cHost := cHost
   oTepuy:nPort := Val(cPort)
   oTepuy:cDb   := cDb  
   oTepuy:cUser := cUser
   oTepuy:cPass := hb_crypt(cPass, oTepuy:cPassword)

RETURN .T.

//EOF
